// Copyright (C) 2014 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
es6id: 14.5
description: >
    class name binding expression
---*/
function Test() {
    var Cc;
    var Cm;
    var Cgx;
    var Csx;
    var Cv = class C {
      constructor() {
        assert.sameValue(C, Cv, "The value of `C` is `Cv`, inside `constructor()`");
        Cc = C;
      }
      m() {
        assert.sameValue(C, Cv, "The value of `C` is `Cv`, inside `m()`");
        Cm = C;
      }
      get x() {
        assert.sameValue(C, Cv, "The value of `C` is `Cv`, inside `get x()`");
        Cgx = C;
      }
      set x(_) {
        assert.sameValue(C, Cv, "The value of `C` is `Cv`, inside `set x()`");
        Csx = C;
      }
    };

    new Cv();
    assert.sameValue(Cc, Cv, "The value of `Cc` is `Cv`, after executing `new Cv();`");

    new Cv().m();
    assert.sameValue(Cm, Cv, "The value of `Cm` is `Cv`, after executing `new Cv().m();`");

    new Cv().x;
    assert.sameValue(Cgx, Cv, "The value of `Cgx` is `Cv`, after executing `new Cv().x;`");

    new Cv().x = 1;
    assert.sameValue(Csx, Cv, "The value of `Csx` is `Cv`, after executing `new Cv().x = 1;`");
}

// preheat
const NUMBER_OF_PREHEAT = 1;
for (let i = 0; i < NUMBER_OF_PREHEAT; i++) {
    Test();
}

ArkTools.jitCompileAsync(Test);
assert.sameValue(ArkTools.waitJitCompileFinish(Test), true, '[JIT] JIT disabled.');

// test
const NUMBER_OF_TEST = 1; // or 2
for (let i = 0; i < NUMBER_OF_PREHEAT; i++) {
    Test();
}
